﻿CREATE TABLE pca_tablas.configuraciones
(
	configuracion_id text NOT NULL,
	descripcion varchar(200) NOT NULL,--Descripcion de la configuracion
	valor text NOT NULL,--El valor por defecto que es almacenado
	CONSTRAINT configuraciones_pk PRIMARY KEY(configuracion_id)
);

--Representa los plazos para las ventas
CREATE TABLE pca_tablas.plazos
(
	plazo_id varchar(2) NOT NULL,
	nombre varchar(50) NOT NULL,
	dias integer NOT NULL,
	CONSTRAINT plazos_pk PRIMARY KEY(plazo_id)
);

--Zonas horarias disponibles
CREATE SEQUENCE pca_tablas.seq_zona_horaria_id;
CREATE TABLE pca_tablas.zonas_horarias
(
	zona_horaria_id integer NOT NULL DEFAULT nextval('pca_tablas.seq_zona_horaria_id'),
	nombre varchar(50),
	activo boolean NOT NULL DEFAULT false,--Valor que indica si se deben usar o no la zona horaria
	CONSTRAINT zonas_horarias_pk PRIMARY KEY(zona_horaria_id)
);

CREATE TABLE pca_tablas.paises
(
	pais_id varchar(2) NOT NULL,
	nombre varchar(100) NOT NULL,
	activo boolean NOT NULL DEFAULT false,--Valor que indica si se debe usar o no el pais
	CONSTRAINT paises_pk PRIMARY KEY(pais_id)
);

--Informacion adicional tabla 1 SUNAT(Tipo de medio de pago)
CREATE TABLE pca_tablas.tipos_medios_pago
(
	tabla_id varchar(2) NOT NULL CHECK(tabla_id='1'),
	codigo varchar(5) NOT NULL,
	nombre_corto varchar(50),
	activo boolean NOT NULL DEFAULT false,--Valor que indica si se debe usar el comprobante
	CONSTRAINT tipos_medios_pago_pk PRIMARY KEY(codigo),
	CONSTRAINT tablas_sunat_fkey FOREIGN KEY(tabla_id,codigo)
	REFERENCES pca_tablas.tablas_sunat(tabla_id,codigo) MATCH FULL
		ON UPDATE CASCADE ON DELETE RESTRICT
);

--Informacion adicional tabla 4 SUNAT(Tipo de moneda)
CREATE TABLE pca_tablas.monedas
(
	tabla_id varchar(2) NOT NULL CHECK(tabla_id='4'),
	codigo varchar(5) NOT NULL,
	siglas varchar(5) NOT NULL,
	activo boolean NOT NULL DEFAULT false,--Valor que indica si se debe usar la moneda
	CONSTRAINT monedas_pk PRIMARY KEY(codigo),
	CONSTRAINT tablas_sunat_fkey FOREIGN KEY(tabla_id,codigo)
		REFERENCES pca_tablas.tablas_sunat(tabla_id,codigo) MATCH FULL
		ON UPDATE CASCADE ON DELETE RESTRICT
);

--Informacion adicional tabla 10 SUNAT(Tipo de comprobante)
CREATE TABLE pca_tablas.tipos_comprobante
(
	tabla_id varchar(2) NOT NULL CHECK(tabla_id='10'),
	codigo varchar(5) NOT NULL,
	nombre_corto varchar(50),
	activo boolean NOT NULL DEFAULT false,--Valor que indica si se debe usar el comprobante
	CONSTRAINT tipos_comprobante_pk PRIMARY KEY(codigo),
	CONSTRAINT tablas_sunat_fkey FOREIGN KEY(tabla_id,codigo)
	REFERENCES pca_tablas.tablas_sunat(tabla_id,codigo) MATCH FULL
		ON UPDATE CASCADE ON DELETE RESTRICT
);

--Informacion adicional tabla 2 SUNAT(Tipo de documento de identidad)
CREATE TABLE pca_tablas.tipos_documentos_identidad
(
	tabla_id varchar(2) NOT NULL CHECK(tabla_id='2'),
	codigo varchar(5) NOT NULL,
	nombre_corto varchar(50),
	caracteres_min integer NOT NULL DEFAULT 0,
	caracteres_max integer NOT NULL DEFAULT 0,
	activo boolean NOT NULL DEFAULT false,--Valor que indica si se debe usar el comprobante
	CONSTRAINT tipos_documentos_identidad_pk PRIMARY KEY(codigo),
	CONSTRAINT tablas_sunat_fkey FOREIGN KEY(tabla_id,codigo)
	REFERENCES pca_tablas.tablas_sunat(tabla_id,codigo) MATCH FULL
		ON UPDATE CASCADE ON DELETE RESTRICT
);

-----------------------------------------------------------------------------------------------
--------------------------------------------Vistas---------------------------------------------
-----------------------------------------------------------------------------------------------
CREATE OR REPLACE VIEW pca_tablas.vw_tipos_medios_pago AS
SELECT
	m.tabla_id,
	m.codigo,
	t.nombre,
	m.nombre_corto,
	m.activo
FROM
	pca_tablas.tipos_medios_pago m
INNER JOIN
	pca_tablas.tablas_sunat t
ON
	m.tabla_id = t.tabla_id AND
	m.codigo = t.codigo;

CREATE OR REPLACE VIEW pca_tablas.vw_tipos_comprobante AS
SELECT
	c.tabla_id,
	c.codigo,
	t.nombre,
	c.nombre_corto,
	c.activo
FROM
	pca_tablas.tipos_comprobante c
INNER JOIN
	pca_tablas.tablas_sunat t
ON
	c.tabla_id = t.tabla_id AND
	c.codigo = t.codigo;

CREATE OR REPLACE VIEW pca_tablas.vw_monedas AS
SELECT
	m.tabla_id,
	m.codigo,
	t.nombre,
	m.siglas,
	m.activo
FROM
	pca_tablas.monedas m
INNER JOIN
	pca_tablas.tablas_sunat t
ON
	m.tabla_id = t.tabla_id AND
	m.codigo = t.codigo;

CREATE OR REPLACE VIEW pca_tablas.vw_tipos_documentos_identidad AS
SELECT
	i.tabla_id,
	i.codigo,
	t.nombre,
	i.nombre_corto,
	i.caracteres_min,
	i.caracteres_max,
	i.activo
FROM
	pca_tablas.tipos_documentos_identidad i
INNER JOIN
	pca_tablas.tablas_sunat t
ON
	i.tabla_id = t.tabla_id AND
	i.codigo = t.codigo;

-----------------------------------------------------------------------------------------------
---------------------------------- pca_tablas.configuraciones----------------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_configuracion(text --configuracion_id $1
							   )RETURNS SETOF pca_tablas.configuraciones AS
$$
DECLARE
	_row pca_tablas.configuraciones%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.configuraciones
		WHERE
			configuracion_id = $1
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_tablas.fn_update_configuracion(text, --configuracion_id $1
							      text --valor 
							      )RETURNS void AS
$$
BEGIN
	UPDATE pca_tablas.configuraciones SET
		valor = $2
	WHERE
		configuracion_id = $1;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_list_configuraciones()RETURNS SETOF pca_tablas.configuraciones AS
$$
DECLARE
	_row pca_tablas.configuraciones%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.configuraciones
		ORDER BY
			configuracion_id
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-------------------------------------------------------------------------------------------------------
---------------------------------------pca_tablas.plazos-----------------------------------------------
-------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_list_plazos() RETURNS SETOF pca_tablas.plazos AS
$$
DECLARE
	_row pca_tablas.plazos%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.plazos
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-----------------------------------------------------------------------------------------------
------------------------------- pca_tablas.zonas_horarias--------------------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_list_zonas(varchar --nombre
							)RETURNS SETOF pca_tablas.zonas_horarias AS
$$
DECLARE
	_row pca_tablas.zonas_horarias%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.zonas_horarias
		WHERE
			activo = true AND
			lower(pca_global.fn_ascii(nombre)) LIKE '%'|| lower(pca_global.fn_ascii($1)) ||'%'
		ORDER BY
			nombre ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_zona_horaria(integer --zona_horaria_id
							  )RETURNS SETOF pca_tablas.zonas_horarias AS
$$
DECLARE
	_row pca_tablas.zonas_horarias%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.zonas_horarias
		WHERE
			activo = true AND
			zona_horaria_id = $1
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-----------------------------------------------------------------------------------------------
---------------------------------------pca_tablas.paises---------------------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_pais(varchar --pais_id
						  )RETURNS SETOF pca_tablas.paises AS
$$
DECLARE
	_row pca_tablas.paises%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.paises
		WHERE
			pais_id = $1
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_list_paises(varchar --nombre
							)RETURNS SETOF pca_tablas.paises AS
$$
DECLARE
	_row pca_tablas.paises%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.paises
		WHERE
			activo = true AND
			lower(pca_global.fn_ascii(nombre)) LIKE '%'|| lower(pca_global.fn_ascii($1)) ||'%'
		ORDER BY
			nombre ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-----------------------------------------------------------------------------------------------
----------------------------------pca_tablas.tipos_medios_pago---------------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_list_tipos_medios_pago()RETURNS SETOF pca_tablas.vw_tipos_medios_pago AS
$$
DECLARE
	_row pca_tablas.vw_tipos_medios_pago%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.vw_tipos_medios_pago
		WHERE
			activo = true
		ORDER BY
			codigo ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;	
END;
$$
LANGUAGE plpgsql;

-----------------------------------------------------------------------------------------------
------------------------------------ pca_tablas.monedas----------------------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_moneda(varchar --codigo
						    )RETURNS SETOF pca_tablas.vw_monedas AS
$$
DECLARE
	_row pca_tablas.vw_monedas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.vw_monedas
		WHERE
			codigo = $1
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_list_monedas()RETURNS SETOF pca_tablas.vw_monedas AS
$$
DECLARE
	_row pca_tablas.vw_monedas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.vw_monedas
		WHERE
			activo = true
		ORDER BY
			codigo ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-----------------------------------------------------------------------------------------------
-----------------------------------pca_tablas.tipos_comprobante--------------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_list_tipo_comprobante()RETURNS SETOF pca_tablas.vw_tipos_comprobante AS
$$
DECLARE
	_row pca_tablas.vw_tipos_comprobante%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.vw_tipos_comprobante
		WHERE
			activo = true
		ORDER BY
			codigo ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-----------------------------------------------------------------------------------------------
------------------------------pca_tablas.tipos_documentos_identidad----------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_tipo_documento_identidad(varchar --codigo $1
								      )RETURNS SETOF pca_tablas.vw_tipos_documentos_identidad AS
$$
DECLARE
	_row pca_tablas.vw_tipos_documentos_identidad%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.vw_tipos_documentos_identidad
		WHERE
			codigo = $1
		ORDER BY
			codigo ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_tablas.fn_get_list_tipos_documentos_identidad()RETURNS SETOF pca_tablas.vw_tipos_documentos_identidad AS
$$
DECLARE
	_row pca_tablas.vw_tipos_documentos_identidad%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_tablas.vw_tipos_documentos_identidad
		WHERE
			activo = true
		ORDER BY
			codigo ASC
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-----------------------------------------------------------------------------------------------
------------------------------------- Datos de Inicio------------------------------------------
-----------------------------------------------------------------------------------------------

-- pca_tablas.configuraciones
INSERT INTO
	pca_tablas.configuraciones
VALUES
	('ValIgv','Valor del IGV','18'),
	('MonedaDefault','El id de la moneda por defecto(Tabla 4 SUNAT)','1'),
	('PlazoDefault','El plazo por defecto(Tabla plazos)','01'),
	('IncluirIgvSubTotales','Indica si debe descontar el IGV a los subtotales(dependiendo del valor de "PreciosIncIgvVenta")','True'),
	('PreciosIncIgvVenta','Cuando se realiza ventas incluir IGV por defecto','True'),
	('ImprimirPreciosGuiaRemisionRemitente','Indica si se debe imprimir o no los precios en la guia de remision remitente','True'),
	('UltimaSesion','La ultima fecha-hora en que se inicio sesion',current_timestamp::text);
	
--Plazos
INSERT INTO 
	pca_tablas.plazos 
VALUES
	('00','Vencimiento Manual',0),
	('01','De Contado',0),
	('02','8 días',8),
	('03','15 días',15),
	('04','30 días',30),
	('05','60 días',60);

/*
 * Lista de Zonas Horarias soportadas por la base de datos
 */
INSERT INTO pca_tablas.zonas_horarias(nombre) SELECT name FROM pg_timezone_names;

--Paises
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AE','Emiratos Árabes Unidos');
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AF','Afganistán');
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AG','Antigua y Barbuda');
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AI','Anguila'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AL','Albania'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AM','Armenia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AO','Angola'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AQ','Antártida'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AR','Argentina'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AT','Austria'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AU','Australia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AW','Aruba'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AS','Samoa Americana'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('AZ','Azerbaiyán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BA','Bosnia y Herzegovina'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BB','Barbados'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BD','Bangladés'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BE','Bélgica'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BF','Burkina Faso'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BG','Bulgaria'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BH','Bahréin'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BI','Burundi'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BJ','Benín'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BM','Bermudas'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BN','Brunéi'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BO','Bolivia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BR','Brasil'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BS','Las Bahamas'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BT','Bután'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BV','Isla Bouvet'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BW','Botsuana'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BY','Bielorrusia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('BZ','Belice'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CA','Canadá'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CC','Islas Cocos'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CD','República Democrática del Congo'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CF','República Centroafricana'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CG','Congo'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CH','Suiza'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CI','Costa de Marfil'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CK','Islas Cook'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CL','Chile'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CM','Camerún'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CN','China'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CO','Colombia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CR','Costa Rica'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CU','Cuba'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CV','Cabo Verde');
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CW','Curazao'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CX','Isla de Navidad'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CY','Chipre'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('CZ','República Checa'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('DE','Alemania'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('DJ','Yibuti'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('DK','Dinamarca'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('DM','Dominica'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('DO','República Dominicana'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('DZ','Argelia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('EC','Ecuador'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('EE','Estonia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('EG','Egipto'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('EH','Sahara Occidental'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ER','Eritrea'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ES','España'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ET','Etiopía'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('FI','Finlandia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('FJ','Fiyi'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('FK','Islas Malvinas'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('FM','Micronesia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('FO','Islas Feroe'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('FR','Francia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GA','Gabón'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GB','Reino Unido'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GD','Granada'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GE','Georgia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GF','Guayana Francesa'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GG','Guernsey'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GH','Ghana'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GI','Gibraltar'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GL','Groenlandia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GM','Gambia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GN','Guinea'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GP','Guadalupe'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GQ','Guinea Ecuatorial'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GR','Grecia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GS','Islas Georgias del Sur y Sandwich del Sur'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GT','Guatemala'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GU','Guam'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GW','Guinea-Bissau'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('GY','Guyana'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('HK','Hong Kong'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('HM','Islas Heard y McDonald'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('HN','Honduras'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('HR','Croacia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('HT','Haití'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('HU','Hungría'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ID','Indonesia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IE','Irlanda'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IN','India'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IL','Israel'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IM','Isla de Man'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IO','Territorio Británico del Océano Índico'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IQ','Irak'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IR','Irán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IT','Italia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('IS','Islandia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('JE','Jersey'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('JM','Jamaica'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('JO','Jordania'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('JP','Japón'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KE','Kenia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KG','Kirguistán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KH','Camboya'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KI','Kiribati'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KM','Comoras'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KN','San Cristóbal y Nieves'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KP','Corea del Norte'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KR','Corea del Sur'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KW','Kuwait'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KY','Islas Caimán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('KZ','Kazajistán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LA','Laos'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LB','Líbano'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LC','Santa Lucía'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LI','Liechtenstein'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LK','Sri Lanka'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LR','Liberia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LS','Lesoto'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LT','Lituania'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LU','Luxemburgo'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LV','Letonia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('LY','Libia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MA','Marruecos'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MC','Mónaco'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MD','Moldavia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ME','Montenegro'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MF','Saint Martin'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MG','Madagascar'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MH','Islas Marshall'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MK','Macedonia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ML','Malí'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MM','Birmania'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MN','Mongolia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MO','Macao'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MP','Islas Marianas del Norte'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MQ','Martinica'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MR','Mauritania'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MS','Montserrat'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MT','Malta'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MU','Mauricio'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MV','Maldivas'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MW','Malaui'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MX','México'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MY','Malasia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('MZ','Mozambique'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NA','Namibia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NC','Nueva Caledonia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NE','Níger'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NF','Isla Norfolk'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NG','Nigeria'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NI','Nicaragua'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NL','Países Bajos'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NO','Noruega'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NP','Nepal'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NR','Nauru'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NU','Niue'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('NZ','Nueva Zelanda'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('OM','Omán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PA','Panamá'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PE','Perú'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PF','Polinesia Francesa'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PG','Papúa Nueva Guinea'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PH','Filipinas'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PK','Pakistán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PL','Polonia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PM','San Pedro y Miguelón'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PN','Islas Pitcairn'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PR','Puerto Rico'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PS','Palestina'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PT','Portugal'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PW','Palaos'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('PY','Paraguay'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('QA','Catar'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('RE','La Reunión'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('RO','Rumanía'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('RS','Serbia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('RU','Rusia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('RW','Ruanda'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SA','Arabia Saudita'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SB','Islas Salomón'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SC','Seychelles'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SD','Sudán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SE','Suecia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SG','Singapur'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SH','Santa Elena'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SI','Eslovenia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SJ','Svalbard y Jan Mayen'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SK','Eslovaquia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SL','Sierra Leona'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SM','San Marino'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SN','Senegal'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SO','Somalia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SR','Surinam'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SS','Sudán del Sur'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ST','Santo Tomé y Príncipe'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SV','El Salvador'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SX','Sint Maarten'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SY','Siria'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('SZ','Suazilandia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TC','Islas Turcas y Caicos'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TD','Chad'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TF','Territorios Australes Franceses'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TG','Togo'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TH','Tailandia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TJ','Tayikistán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TK','Tokelau'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TL','Timor Oriental'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TM','Turkmenia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TN','Túnez'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TR','Turquía'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TT','Trinidad y Tobago'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TV','Tuvalu'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TW','Taiwán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TO','Tonga'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('TZ','Tanzania'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('UA','Ucrania'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('UG','Uganda'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('UM','Islas Ultramarinas de Estados Unidos'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('US','Estados Unidos'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('UY','Uruguay'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('UZ','Uzbekistán'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('VA','Ciudad del Vaticano'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('VC','San Vicente y las Granadinas'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('VE','Venezuela'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('VG','Islas Vírgenes Británicas'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('VI','Islas Vírgenes de los EEUU'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('VN','Vietnam'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('VU','Vanuatu'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('WF','Wallis y Futuna'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('WS','Samoa'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('XK','Kosovo (NO oficial, provisional)'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('YE','Yemen'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('YT','Mayotte'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ZA','Sudáfrica'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ZM','Zambia'); 
INSERT INTO pca_tablas.paises(pais_id,nombre) VALUES('ZW','Zimbabue');

-- pca_tablas.monedas
INSERT INTO pca_tablas.monedas
	(tabla_id,codigo,siglas) 
VALUES
	('5','1','S/.'),
	('4','2','US$'),
	('4','9','OT');

-- pca_tablas.tipos_comprobante
INSERT INTO pca_tablas.tipos_comprobante
	(tabla_id,codigo,nombre_corto)
SELECT '10'::varchar,codigo,null FROM pca_tablas.tablas_sunat WHERE tabla_id='10';
UPDATE pca_tablas.tipos_comprobante SET nombre_corto='FACTURA' WHERE codigo='01';
UPDATE pca_tablas.tipos_comprobante SET nombre_corto='BOLETA' WHERE codigo='03';
UPDATE pca_tablas.tipos_comprobante SET nombre_corto='TICKET' WHERE codigo='12';

-- pca_tablas.tipos_medios_pago
INSERT INTO pca_tablas.tipos_medios_pago
	(tabla_id,codigo,nombre_corto)
SELECT '1'::varchar,codigo,null FROM pca_tablas.tablas_sunat WHERE tabla_id='1';
UPDATE pca_tablas.tipos_medios_pago SET nombre_corto='EFECTIVO' WHERE codigo='009';

-- pca_tablas.tipos_documentos_identidad
INSERT INTO pca_tablas.tipos_documentos_identidad
	(tabla_id,codigo,nombre_corto)
SELECT '2'::varchar,codigo,null FROM pca_tablas.tablas_sunat WHERE tabla_id='2';
UPDATE pca_tablas.tipos_documentos_identidad SET nombre_corto = 'OT' WHERE codigo='0';
UPDATE pca_tablas.tipos_documentos_identidad SET nombre_corto = 'DNI', caracteres_min=8, caracteres_max=8 WHERE codigo='1';
UPDATE pca_tablas.tipos_documentos_identidad SET nombre_corto = 'CE' WHERE codigo='4';
UPDATE pca_tablas.tipos_documentos_identidad SET nombre_corto = 'RUC', caracteres_min=11, caracteres_max=11 WHERE codigo='6';
UPDATE pca_tablas.tipos_documentos_identidad SET nombre_corto = 'PAS' WHERE codigo='7';